using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._TerrainDataset
{
    /// <summary>
    /// <para>Append Terrain Points</para>
    /// <para>Appends points to a point  feature referenced by a terrain dataset.</para>
    /// <para>将点追加到 terrain 数据集所引用的点要素。</para>
    /// </summary>    
    [DisplayName("Append Terrain Points")]
    public class AppendTerrainPoints : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AppendTerrainPoints()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_terrain">
        /// <para>Input Terrain</para>
        /// <para>The terrain dataset to process.</para>
        /// <para>要处理的 terrain 数据集。</para>
        /// </param>
        /// <param name="_terrain_feature_class">
        /// <para>Input Terrain Data Source</para>
        /// <para>The feature class that contributes to the terrain dataset into which the points or multipoints will be added.</para>
        /// <para>为要向中添加点或多点的 terrain 数据集做出贡献的要素类。</para>
        /// </param>
        /// <param name="_in_point_features">
        /// <para>Input Points</para>
        /// <para>The feature class of points or multipoints to add as an additional data source for the terrain dataset.</para>
        /// <para>要添加为 terrain 数据集的附加数据源的点或多点的要素类。</para>
        /// </param>
        public AppendTerrainPoints(object _in_terrain, object _terrain_feature_class, object _in_point_features)
        {
            this._in_terrain = _in_terrain;
            this._terrain_feature_class = _terrain_feature_class;
            this._in_point_features = _in_point_features;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Append Terrain Points";

        public override string CallName => "3d.AppendTerrainPoints";

        public override List<string> AcceptEnvironments => ["autoCommit", "extent", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_terrain, _terrain_feature_class, _in_point_features, _polygon_features_or_extent, _derived_out_terrain];

        /// <summary>
        /// <para>Input Terrain</para>
        /// <para>The terrain dataset to process.</para>
        /// <para>要处理的 terrain 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Terrain")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_terrain { get; set; }


        /// <summary>
        /// <para>Input Terrain Data Source</para>
        /// <para>The feature class that contributes to the terrain dataset into which the points or multipoints will be added.</para>
        /// <para>为要向中添加点或多点的 terrain 数据集做出贡献的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Terrain Data Source")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _terrain_feature_class { get; set; }


        /// <summary>
        /// <para>Input Points</para>
        /// <para>The feature class of points or multipoints to add as an additional data source for the terrain dataset.</para>
        /// <para>要添加为 terrain 数据集的附加数据源的点或多点的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Points")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_point_features { get; set; }


        /// <summary>
        /// <para>Area of Interest</para>
        /// <para>Specify a polygon feature class or extent values to define the area where point features will be added. This parameter is empty by default, which results in all the points from the input feature class being loaded to the terrain feature.</para>
        /// <para>指定面要素类或范围值以定义将添加点要素的区域。默认情况下，此参数为空，这将导致输入要素类中的所有点都加载到地形要素中。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Area of Interest")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _polygon_features_or_extent { get; set; } = null;


        /// <summary>
        /// <para>Updated Input Terrain</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Terrain")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_out_terrain { get; set; }


        public AppendTerrainPoints SetEnv(int? autoCommit = null, object extent = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(autoCommit: autoCommit, extent: extent, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}